package com.mindskip.xzs.base;


import com.mindskip.xzs.context.WebContext;
import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.utility.ModelMapperSingle;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;


// 定义一个基础的 API 控制器类
public class BaseApiController {

    // 定义一个常量，表示默认的分页大小
    protected final static String DEFAULT_PAGE_SIZE = "10";

    // 定义一个静态常量，表示 ModelMapper 实例ModelMapper 是一个对象映射工具，常用于将数据传输对象（DTO）转换为实体对象，或者将实体对象转换为 DTO。
    // 这里通过一个单例模式（ModelMapperSingle.Instance()）提供了一个 ModelMapper 实例，这样可以保证所有继承 BaseApiController 的子类都能共享同一个 ModelMapper 实例，节省资源和保证一致性。
    protected final static ModelMapper modelMapper = ModelMapperSingle.Instance();

    // 使用 @Autowired 注解自动注入 WebContext 实例WebContext 是一个上下文对象，通常用于存储与当前请求相关的信息，比如当前登录的用户、请求的会话信息等。
    // 通过 @Autowired 注解，Spring 框架会自动注入 WebContext 实例。
    // 这样，BaseApiController 及其子类就可以方便地访问这些上下文信息。
    @Autowired
    protected WebContext webContext;

    //这个方法封装了从 WebContext 获取当前用户的逻辑。
    // 这样，任何继承 BaseApiController 的控制器类都可以直接调用 getCurrentUser() 方法来获取当前请求的用户信息，而不需要重复实现这些逻辑。
    protected User getCurrentUser() {
        // 调用 webContext 的 getCurrentUser 方法，返回当前用户
        return webContext.getCurrentUser();
    }
}